package com.demo.web;

import com.demo.pojo.User;
import com.demo.service.UserService;
import com.demo.service.imp.UserServiceImpl;
import com.google.gson.Gson;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    private UserService userService = new UserServiceImpl();
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获取客户端提交的数据
        String account = req.getParameter("account");
        String password = req.getParameter("password");
        String autoLogin = req.getParameter("autoLogin");
        resp.setContentType("text/html;charset=utf-8");
        // 判断账号密码，保证数据不为空
        if( account == null || "".equals(account.trim()) ){
            resp.getWriter().write("账号不能为空");
            return;
        }
        if( password == null || "".equals(password.trim()) ){
            resp.getWriter().write("密码不能为空");
            return;
        }
        User user = this.userService.login(account, password);
        if(user == null){
            resp.getWriter().write("账号或密码错误");
        }else{
            // 判断是否勾选的10天免登录checkbox，若勾选了，就需要将登录的相关信息存储在Cookie中，
            // 然后后续访问时获取到Cookie中的数据判断是否正确，执行免登录的操作
            if(autoLogin !=null && "true".equals(autoLogin.trim())){
                // 判断成立，说明用户勾选了免登录，这时给cookie中存储数据
                Cookie userAccount = new Cookie("userAccount",user.getAccount());
                Cookie userPwd = new Cookie("userPwd",user.getPassword());
                userAccount.setMaxAge(60*60*24*10);
                userPwd.setMaxAge(60*60*24*10);
                resp.addCookie(userAccount);
                resp.addCookie(userPwd);
            }
            // 需要将Java对象转成字符串形式，发送给客户端
            // 需要将User对象转成JSON（字符串）{"account":"","name":"","sex":""}
            // 在Java中将对象转JSON，JSON转Java对象（集合、单个对象），可以使用第三方的JSON框架
            // 阿里巴巴的 fastjson
            // 谷歌公司的 gson
            // jackson SpringMVC框架的底层默认使用的json工具包
            String json = new Gson().toJson(user);
            System.out.println(json);
            resp.setContentType("application/json;charset=utf-8");
            resp.getWriter().write(json);
        }
    }
}
